/**
 * SOP模块 - 应用管理API
 * @description 应用管理相关的API接口定义
 * @author AI Assistant
 * @since 1.0.0
 */

import request from '@/config/axios'
import type {
  AppInfoVO,
  AppInfoCreateReqVO,
  AppInfoUpdateReqVO,
  AppInfoPageReqVO,
  AppStatusUpdateReqVO,
  AppSecretResetReqVO,
  PageResult
} from './types'

/**
 * 获取应用分页列表
 * @param params 分页查询参数
 * @returns 应用分页数据
 */
export const getAppInfoPageApi = (params: AppInfoPageReqVO): Promise<PageResult<AppInfoVO>> => {
  return request.get({ url: '/sop/app-info/page', params })
}

/**
 * 获取应用详情
 * @param id 应用ID
 * @returns 应用详情
 */
export const getAppInfoApi = (id: number): Promise<AppInfoVO> => {
  return request.get({ url: `/sop/app-info/get?id=${id}` })
}

/**
 * 根据AppId获取应用详情
 * @param appId 应用ID
 * @returns 应用详情
 */
export const getAppInfoByAppIdApi = (appId: string): Promise<AppInfoVO> => {
  return request.get({ url: `/sop/app-info/get-by-app-id?appId=${appId}` })
}

/**
 * 创建应用
 * @param data 应用创建数据
 * @returns 创建结果
 */
export const createAppInfoApi = (data: AppInfoCreateReqVO): Promise<number> => {
  return request.post({ url: '/sop/app-info/create', data })
}

/**
 * 更新应用
 * @param data 应用更新数据
 * @returns 更新结果
 */
export const updateAppInfoApi = (data: AppInfoUpdateReqVO): Promise<boolean> => {
  return request.put({ url: '/sop/app-info/update', data })
}

/**
 * 删除应用
 * @param id 应用ID
 * @returns 删除结果
 */
export const deleteAppInfoApi = (id: number): Promise<boolean> => {
  return request.delete({ url: `/sop/app-info/delete?id=${id}` })
}

/**
 * 更新应用状态
 * @param data 状态更新数据
 * @returns 更新结果
 */
export const updateAppStatusApi = (data: AppStatusUpdateReqVO): Promise<boolean> => {
  return request.put({ url: '/sop/app-info/update-status', data })
}

/**
 * 重置应用密钥
 * @param data 重置密钥数据
 * @returns 重置结果(返回新的AppSecret)
 */
export const resetAppSecretApi = (data: AppSecretResetReqVO): Promise<string> => {
  return request.put({ url: '/sop/app-info/reset-secret', data })
}

/**
 * 获取应用列表(不分页)
 * @param merchantNo 商户编号(可选)
 * @param status 应用状态(可选)
 * @returns 应用列表
 */
export const getAppInfoListApi = (merchantNo?: string, status?: number): Promise<AppInfoVO[]> => {
  const params: any = {}
  if (merchantNo) params.merchantNo = merchantNo
  if (status !== undefined) params.status = status
  return request.get({ url: '/sop/app-info/list', params })
}

// 兼容视图层命名与搜索需求：按名称等条件获取应用列表
export const getAppListApi = (params?: {
  appName?: string
  merchantNo?: string
  status?: number
}): Promise<AppInfoVO[]> => {
  return request.get({ url: '/sop/app-info/list', params })
}

/**
 * 批量更新应用状态
 * @param ids 应用ID列表
 * @param status 状态: 0-禁用 1-启用
 * @returns 批量更新结果
 */
export const batchUpdateAppStatusApi = (ids: number[], status: number): Promise<boolean> => {
  return request.put({
    url: '/sop/app-info/batch-update-status',
    data: { ids, status }
  })
}

/**
 * 验证应用权限
 * @param appId 应用ID
 * @param apiPath API路径
 * @returns 验证结果
 */
export const validateAppPermissionApi = (appId: string, apiPath: string): Promise<boolean> => {
  return request.post({
    url: '/sop/app-info/validate-permission',
    data: { appId, apiPath }
  })
}

/**
 * 获取应用统计数据
 * @param params 查询参数
 * @returns 统计数据
 */
export const getAppStatisticsApi = (params: {
  merchantNo?: string
  dateRange?: [string, string]
}): Promise<{
  totalApps: number // 总应用数
  enabledApps: number // 启用应用数
  disabledApps: number // 禁用应用数
  expiredApps: number // 过期应用数
  totalCalls: number // 总调用次数
  avgCallsPerApp: number // 平均每个应用调用次数
}> => {
  return request.get({ url: '/sop/app-info/statistics', params })
}

/**
 * 导出应用数据
 * @param params 查询参数
 * @returns 导出文件
 */
export const exportAppInfoApi = (params: AppInfoPageReqVO): Promise<void> => {
  return request.download({
    url: '/sop/app-info/export',
    params
  })
}
